/*
 * Hlavni.c
 *
 *  Created on: 6.11.2012
 *      Author: Z183797
 */
#include <stdio.h>
#include <avr/io.h>


#include <util/delay.h>
#include <avr/interrupt.h>
//Lokalni header
#include "Hlavni.h"
#include "UART.h"
#include "data.h"

char prijaty_znak;

/*
 * ISR
 *  - interrupt od UART
 *  - nastaveni startu ramce
 */
ISR(USART_RXC_vect) {
        if (flag == 1) {
                nactiData(UDR);
        } else if ((flag == 0) && (validData(UDR))) {
                flag = 1;
               // writeCharacter((char)flag);
                //cli();          // Vypnout globalne interrupty / otazka zda stale zapinat vzpinat??
        }

}

int main(void) {
        stav = INIT;            // Po startu programu musi jako prvni probehnout INIT

        while (1) {
                switch (stav) {
                        case INIT:
                                inicialiazace();
                                writeUART("INIT");
                                break;
                        case PROBLEM:
                        flag=3;
                        // Prip. selhani initu atd.
                                break;
                        case ALARM:
								 blikLED();
                        		stav=NEPLATNA_DATA;		//!!! predelat	
                                break;
                        case NOVA_DATA:
							if(reference==true)
							{	
                                ulozeniDat(ptr_reference);
								reference=false;
							}
							else
							{//#else
                                ulozeniDat(ptr_aktualni);
								writeUART("NOTREF");
							}
                                break;
                        case DATA:
							
                                kontrolaDat();
                                ptr_aktualni->platnost=DATA_NEPLATNA;
                                break;
                        case NEPLATNA_DATA:
                               writeUART("");
                                
                                break;
                        default:
                                break;
                }
        }

}
/*
 * inicializace
 *  - prvotni iniciazace -> NEPLATNA_DATA
 *  - pridat pri selhani INITU -> PROBLEM
 */
void inicialiazace()
{
        initPorts();
        initUART();
        sei();
        //<! Global interrupt
        ptr_reference = &pozice[0];      //<! Pointer na referncni polohu
        ptr_aktualni = &pozice[1];           //<! Pointer na aktualni polohu
        ptr_aktualni->platnost=DATA_NEPLATNA;
        ptr_reference->platnost=DATA_NEPLATNA;
		reference=true;
        stav= NEPLATNA_DATA;
}

/*
 * initPorts
 * - inicializadce portu PDB pro LED diodu
 */
void initPorts() {
        DDRB |= (1 << PB0);           //<! Aktivovani pinu PB0
        PORTB = (1 << PB0);            //<! Nastaveni do vysoke urovne
}

/*
 * blikLED
 * - funkce na blikani LED diodu
 * - docasne pro siganlizaci
 */
void blikLED() {
        PORTB = (0 << PB0);
        _delay_ms(1000);
        //PORTB = (1 << PB0);
        //_delay_ms(1000);
}

